package com.uniplaza.app.volley;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.components.volley.EventCallback;
import com.uniplaza.app.utils.Utils;
import com.uniplaza.app.base.Application;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import static com.uniplaza.app.utils.Utils.log;


/**
 * 工具集 - 网络常用的方法
 */
public class ApiUtils {
    private static final String TAG = "ApiUtils";

    public static final int GET = Request.Method.GET;
    public static final int POST = Request.Method.POST;
    public static final int PUT = Request.Method.PUT;
    public static final int DELETE = Request.Method.DELETE;


    /**
     * 网络请求 用于判断是否联网
     *
     * @param mQueue       请求类型列队管理对象
     * @param method       请求方式
     * @param nRequestType 请求标示
     * @param params       请求参数
     * @param mCallBack    完成后的处理方法
     */
    public static void send(RequestQueue mQueue, int method, String nRequestType,
                                 Map<String, String> params, EventCallback mCallBack) {
        setHeaderParam(mQueue, method, nRequestType, params, mCallBack);
    }


    /**
     * 设置网络请求时所需的数据
     *
     * @param mQueue       请求类型列队管理对象
     * @param method       请求类型
     * @param nRequestType 请求标示
     * @param mCallBack    请求完毕之后的处理方法
     */
    private static void setHeaderParam(RequestQueue mQueue, int method, String nRequestType, Map<String, String> params, EventCallback mCallBack) {
        String url = getUrl(nRequestType, params);
        HashMap<String, String> headers = new HashMap<>();
        setHeader(method, headers);
        if (ApiConstant.APP_DBG) {
            Utils.log(TAG, "------ params ------");
            traversal(params);
        }
        if (null != params) {
            params.remove(ApiConstant.KEY.URL_ID);
//            params.remove(Constant.KEY.PAGE);
        }
        if (Request.Method.POST == method || Request.Method.PUT == method) {
            Controller.getInstance().getData(mQueue, method, url, headers, params, nRequestType, mCallBack);
        } else {
            Controller.getInstance().getData(mQueue, method, setUrlParam(url, params), headers, null, nRequestType, mCallBack);
        }
    }

    /**
     * 微信获取TOKEN
     *
     * @param mQueue       请求类型列队管理对象
     * @param method       请求类型
     * @param nRequestType 请求标示
     * @param mCallBack    请求完毕之后的处理方法
     */
//    public static void getToken(RequestQueue mQueue, int method, String nRequestType, Map<String, String> params, EventCallback mCallBack) {
//        String url = Constant.WECHAT.WECHET_GET_CODE_URL + nRequestType;
//        if (null != params) params.remove(Constant.KEY.URL_ID);
//        Controller.getInstance().getWXData(mQueue, method, setUrlParam(url, params), null, null, nRequestType, mCallBack);
//
//    }

    /**
     * 网络请求的头文件（参数）
     *
     * @param headers 参数的值
     */
    private static void setHeader(int method, Map<String, String> headers) {
        if (PUT == method || DELETE == method) {
            headers.put("Content-Type", "application/x-www-form-urlenconded");
        }

//        if(Application.getInstance().getLogin()!=null){
//            headers.put(ApiConstant.KEY.SECRET, Application.getInstance().getLogin().getCuId());
//            headers.put(ApiConstant.KEY.AUTHORIZATION, Application.getInstance().getLogin().getToken());
//        }

        headers.put(ApiConstant.KEY.OS, "android");
        headers.put(ApiConstant.KEY.SCREENWIDTH, Application.getInstance().getScreenWidth());

        if (ApiConstant.APP_DBG) {
            log(TAG, "------ header ------");
            traversal(headers);
        }

    }


    /**
     * 网络请求get 方法 参数添加
     *
     * @param url    地址
     * @param params 参数
     */
    private static String setUrlParam(String url, Map<String, String> params) {
        if (null != params) {
            Iterator<String> iter = params.keySet().iterator();
            int i = 0;
            while (iter.hasNext()) {
                String key = iter.next();
                if (i == 0) {
                    url += "?" + key + "=" + params.get(key);
                    i++;
                } else {
                    url += "&" + key + "=" + params.get(key);
                }
            }
        }

        return url;
    }

    /**
     * 获取请求的 URL
     *
     * @param nRequestType 请求的API
     * @return 请求的URL
     */
    private static String getUrl(String nRequestType, Map<String, String> params) {
        String url = nRequestType;
        if (url.contains(ApiConstant.KEY.URL_ID) && null != params.get(ApiConstant.KEY.URL_ID)) {
            url = url.replace(ApiConstant.KEY.URL_ID, params.get(ApiConstant.KEY.URL_ID));
        }
//        if (url.contains(ApiConstant.KEY.PAGE) && null != params.get(ApiConstant.KEY.PAGE)) {
//            url = url.replace(ApiConstant.KEY.PAGE, params.get(ApiConstant.KEY.PAGE));
//        }
        return ApiConstant.IP() + url;
    }


    /**
     * 错误提示
     */
//    public static boolean getError(final Activity context, int error, String message) {
//        log(TAG, "获取到错误 --> " + error);
//        if (PROCESS_FAIL == error) {
//            Utils.toast(context, context.getResources().getString(R.string.error_network));
//        }  else if (error == ErrorToolKit){
//            Utils.toast(context, message);
//        }
//        return false;
//    }


    /**
     * 循环打印 Map 的 key 和 value
     *
     * @param map 需要打印的 Map
     */
    public static void traversal(Map<String, String> map) {
        if (null == map) return;
        Iterator<String> iter = map.keySet().iterator();
        while (iter.hasNext()) {
            String key = iter.next();
            String value = map.get(key);
            log(TAG, "key : " + key + " --> value : " + value);

        }
    }


}
